package org.web.base.helper;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.Date;

public class DateHelper {

    private static final String[] DATE_PATTERNS = {
            "yyyyMMdd",
            "yyyy-MM-dd HH:mm:ss",
            "yyyy-MM-dd",
            "yyyy/MM/dd HH:mm:ss",
            "yyyy/MM/dd",
            "yyyy年MM月dd日",
            "dd-MM月-yyyy",
            "yyyy.MM.dd",
            "HH:mm:ss",
            "yyyy-MM-dd'T'HH:mm:ss'Z'", // ISO格式
            "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" // ISO格式带毫秒
    };
    /**
     * 使用多种日期格式解析日期字符串
     */
    public static Date parseDateWithMultipleFormats(String dateStr) throws Exception {
        // 定义支持的日期格式列表（按优先级排序）
        for (String pattern : DATE_PATTERNS) {
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                sdf.setLenient(false); // 严格模式，避免错误解析
                return sdf.parse(dateStr);
            } catch (ParseException e) {
                // 继续尝试下一种格式
                continue;
            }
        }
        throw new ParseException("无法解析日期字符串: " + dateStr + "，支持的格式：" + Arrays.toString(DATE_PATTERNS), 0);
    }


    /**
     * 将Date转换为String，如果时分秒都为0则只显示日期，否则显示日期时间
     * 使用Java 8日期时间API
     */
    public static String formatDateSmart(Date date) {
        if (date == null) {
            return null;
        }

        LocalDateTime localDateTime = date.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime();

        if (localDateTime.getHour() == 0 &&
                localDateTime.getMinute() == 0 &&
                localDateTime.getSecond() == 0) {
            // 时分秒都为0，只显示日期
            return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        } else {
            // 有时分秒，显示完整日期时间
            return localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        }
    }
}
